<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Java多线程编程完全指南</title>
    <link rel="stylesheet" href="https://cdn.staticfile.org/font-awesome/6.4.0/css/all.min.css">
    <link rel="stylesheet" href="https://cdn.staticfile.org/tailwindcss/2.2.19/tailwind.min.css">
    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/mermaid@latest/dist/mermaid.min.js"></script>
    <style>
        body {
            font-family: 'Noto Sans SC', Tahoma, Arial, Roboto, "Droid Sans", "Helvetica Neue", "Droid Sans Fallback", "Heiti SC", "Hiragino Sans GB", Simsun, sans-serif;
            background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
            min-height: 100vh;
        }
        
        /* Hero Section */
        .hero-gradient {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        }
        
        /* 首字下沉 */
        .drop-cap::first-letter {
            float: left;
            font-size: 4rem;
            line-height: 3rem;
            padding-right: 0.5rem;
            margin-top: 0.5rem;
            font-weight: 700;
            color: #667eea;
        }
        
        /* 卡片悬停效果 */
        .card-hover {
            transition: all 0.3s ease;
        }
        
        .card-hover:hover {
            transform: translateY(-5px);
            box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
        }
        
        /* 代码块样式 */
        pre {
            background: #2d3748;
            color: #e2e8f0;
            padding: 1.5rem;
            border-radius: 0.5rem;
            overflow-x: auto;
            margin: 1.5rem 0;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
        }
        
        /* 标题装饰 */
        .section-title {
            position: relative;
            padding-left: 1rem;
        }
        
        .section-title::before {
            content: '';
            position: absolute;
            left: 0;
            top: 0;
            bottom: 0;
            width: 4px;
            background: linear-gradient(180deg, #667eea 0%, #764ba2 100%);
            border-radius: 2px;
        }
        
        /* 列表样式 */
        .custom-list li {
            position: relative;
            padding-left: 2rem;
            margin-bottom: 1rem;
        }
        
        .custom-list li::before {
            content: '\f00c';
            font-family: 'Font Awesome 6 Free';
            font-weight: 900;
            position: absolute;
            left: 0;
            color: #667eea;
        }
        
        /* 引用样式 */
        .quote-box {
            border-left: 4px solid #667eea;
            background: rgba(102, 126, 234, 0.05);
            padding: 1.5rem;
            margin: 2rem 0;
            border-radius: 0 0.5rem 0.5rem 0;
        }
        
        /* 图片样式 */
        .content-image {
            border-radius: 0.5rem;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
            margin: 2rem auto;
            display: block;
            max-width: 100%;
            height: auto;
        }
        
        /* 滚动动画 */
        .fade-in {
            opacity: 0;
            transform: translateY(20px);
            transition: all 0.6s ease;
        }
        
        .fade-in.visible {
            opacity: 1;
            transform: translateY(0);
        }
        
        /* Mermaid图表样式 */
        .mermaid {
            text-align: center;
            margin: 2rem 0;
        }
    </style>
</head>
<body>
    <!-- Hero Section -->
    <section class="hero-gradient text-white py-20">
        <div class="container mx-auto px-6 text-center">
            <h1 class="text-5xl md:text-6xl font-bold mb-6 animate-pulse">
                <i class="fas fa-code-branch mr-4"></i>Java多线程编程
            </h1>
            <p class="text-xl md:text-2xl mb-8 opacity-90">深入理解并发编程的艺术与实践</p>
            <div class="flex justify-center space-x-8 text-lg">
                <div><i class="fas fa-clock mr-2"></i>阅读时间：15分钟</div>
                <div><i class="fas fa-layer-group mr-2"></i>难度：中级</div>
                <div><i class="fas fa-bookmark mr-2"></i>收藏：2.3k</div>
            </div>
        </div>
    </section>

    <!-- Main Content -->
    <main class="container mx-auto px-6 py-12 max-w-6xl">
        <!-- 概念导图 -->
        <div class="bg-white rounded-lg shadow-xl p-8 mb-12 card-hover">
            <h2 class="text-3xl font-bold mb-6 text-gray-800 section-title">
                <i class="fas fa-sitemap mr-3 text-purple-600"></i>知识体系概览
            </h2>
            <div class="mermaid">
                graph TD
                    A[Java多线程编程] --> B[线程基础]
                    A --> C[线程实现]
                    A --> D[线程同步]
                    A --> E[线程通信]
                    A --> F[线程安全]
                    
                    B --> B1[线程概念]
                    B --> B2[线程vs进程]
                    B --> B3[生命周期]
                    
                    C --> C1[继承Thread]
                    C --> C2[实现Runnable]
                    C --> C3[Callable/Future]
                    
                    D --> D1[synchronized]
                    D --> D2[Lock接口]
                    D --> D3[死锁处理]
                    
                    E --> E1[wait/notify]
                    E --> E2[Condition]
                    
                    F --> F1[原子操作]
                    F --> F2[线程安全集合]
                    F --> F3[不可变对象]
            </div>
        </div>

        <!-- 线程基本概念 -->
        <section class="bg-white rounded-lg shadow-xl p-8 mb-12 card-hover fade-in">
            <h2 class="text-3xl font-bold mb-6 text-gray-800 section-title">
                <i class="fas fa-lightbulb mr-3 text-purple-600"></i>线程的基本概念
            </h2>
            <p class="text-lg text-gray-700 mb-6 drop-cap">
                线程（Thread）是程序执行的最小单位，是程序内部的一条执行路径。每个线程都有自己的执行序列，可以独立运行，但是又共享相同的地址空间和数据。
            </p>
            
            <img src="https://cdn.nlark.com/yuque/0/2024/png/21449790/1711089943382-36c17122-0393-490a-894d-fe2b4243d4ab.png" 
                 alt="线程概念图" class="content-image">
            
            <p class="text-lg text-gray-700 mb-6 indent-8">
                与进程不同的是，线程之间可以共享内存空间和资源，因此线程的创建和切换开销较小，可以提高程序的执行效率。多线程的优势在于能够同时执行多个任务，充分利用多核处理器的性能，提高程序的并发性和响应速度。
            </p>

            <!-- 线程与进程的区别 -->
            <div class="mt-8 bg-gradient-to-r from-purple-50 to-pink-50 rounded-lg p-6">
                <h3 class="text-2xl font-bold mb-4 text-gray-800">
                    <i class="fas fa-exchange-alt mr-2 text-purple-600"></i>线程与进程的区别
                </h3>
                
                <img src="https://cdn.nlark.com/yuque/0/2024/png/21449790/1711090038259-776aba2e-6e11-45f9-bbaa-38d3ecc77fb4.png" 
                     alt="线程与进程对比" class="content-image">
                
                <ul class="custom-list text-gray-700 mt-6">
                    <li>进程是操作系统分配资源的最小单位，拥有独立的内存空间和数据，而线程是进程的子任务，共享进程的内存空间和资源。</li>
                    <li>进程之间相互独立，通信需要通过进程间通信机制，而线程之间共享内存，可以直接进行数据交换。</li>
                    <li>创建和销毁线程的开销较小，切换线程的速度较快，而创建和销毁进程的开销较大。</li>
                </ul>
            </div>

            <!-- 操作系统类型 -->
            <div class="mt-8 quote-box">
                <h4 class="text-xl font-bold mb-3 text-gray-800">
                    <i class="fas fa-desktop mr-2"></i>单进程与多进程操作系统
                </h4>
                <div class="grid md:grid-cols-2 gap-4 text-gray-700">
                    <div>
                        <p class="mb-2"><i class="fas fa-check-circle text-green-500 mr-2"></i>多进程操作系统可同时执行多个任务</p>
                        <p class="mb-2"><i class="fas fa-check-circle text-green-500 mr-2"></i>Windows - 多进程操作系统</p>
                        <p><i class="fas fa-check-circle text-green-500 mr-2"></i>Linux - 多用户多进程操作系统</p>
                    </div>
                    <div>
                        <p class="mb-2"><i class="fas fa-times-circle text-red-500 mr-2"></i>DOS - 单进程操作系统</p>
                        <p><i class="fas fa-info-circle text-blue-500 mr-2"></i>CPU通过时间片快速切换实现"并发"</p>
                    </div>
                </div>
            </div>
        </section>

        <!-- 线程实现方式 -->
        <section class="bg-white rounded-lg shadow-xl p-8 mb-12 card-hover fade-in">
            <h2 class="text-3xl font-bold mb-6 text-gray-800 section-title">
                <i class="fas fa-code mr-3 text-purple-600"></i>线程实现方式
            </h2>
            
            <p class="text-lg text-gray-700 mb-6">在Java中，有几种常见的方式来创建线程：</p>
            
            <img src="https://cdn.nlark.com/yuque/0/2024/png/21449790/1711090207220-a5da7cf6-40c7-4cb2-a6ee-28767cb7ec1f.png" 
                 alt="线程实现方式" class="content-image">

            <!-- 方式1：继承Thread类 -->
            <div class="mb-8 bg-gray-50 rounded-lg p-6">
                <h3 class="text-xl font-bold mb-4 text-gray-800">
                    <span class="bg-purple-600 text-white px-3 py-1 rounded-full mr-2">1</span>
                    继承Thread类
                </h3>
                <ul class="custom-list text-gray-700 mb-4">
                    <li>创建一个类并继承Thread类</li>
                    <li>重写Thread类的run()方法，定义线程要执行的任务</li>
                    <li>创建该类的实例，并调用start()方法启动线程</li>
                </ul>
                <pre><code>class MyThread extends Thread {
    public void run() {
        // 线程执行的任务
    }
}

// 创建线程实例并启动
MyThread thread = new MyThread();
thread.start();</code></pre>
            </div>

            <!-- 方式2：实现Runnable接口 -->
            <div class="mb-8 bg-gray-50 rounded-lg p-6">
                <h3 class="text-xl font-bold mb-4 text-gray-800">
                    <span class="bg-purple-600 text-white px-3 py-1 rounded-full mr-2">2</span>
                    实现Runnable接口
                </h3>
                <ul class="custom-list text-gray-700 mb-4">
                    <li>创建一个类实现Runnable接口</li>
                    <li>实现接口中的run()方法，定义线程要执行的任务</li>
                    <li>创建Runnable接口实现类的实例，并将其作为参数传递给Thread类的构造方法</li>
                    <li>最后调用Thread对象的start()方法启动线程</li>
                </ul>
                <pre><code>class MyRunnable implements Runnable {
    public void run() {
        // 线程执行的任务
    }
}

// 创建Runnable接口实现类的实例
MyRunnable runnable = new MyRunnable();

// 创建线程实例并启动
Thread thread = new Thread(runnable);
thread.start();</code></pre>
            </div>

            <!-- 方式3：使用Callable和Future -->
            <div class="bg-gray-50 rounded-lg p-6">
                <h3 class="text-xl font-bold mb-4 text-gray-800">
                    <span class="bg-purple